Mise à jour le 17/11/2021
Le design pattern Observer

Le design pattern Observer

1. Schema DML



2. Implementation

Ce DP introduit deux notions : l'Observer et l'Observable.
L'Observable doit envoyer une notification aux Observers qui lui sont rattachés pour leur indiquer que l'une de ces données a été changée.

La classe Observable doit donc gérer à la fois son modèle et la liste des Observers (qui sont des attributs de la classe).
Le sujet observé doit donc être au courant que les observateurs existent.

Voici une implémentation classique :

class Subject
{
    protected Observer[] $observers;
    public function __construct(Observer[] $observers) {
        $this->observers = $observers;
    }

    public function doSomething()
    {
        $this->observer->notify($this);
    }
}
abstract class Observer
{
    public function notify(Subject $subject)
    {
         // Fais quelque chose
    }
}
class MyObserver extends Observer
{

}


Une façon différente de procéder serait d'utiliser des EventsListeners : on crée une classe qui met à jour le modèle et qui notifie une liste de Listeners en fonction d'une typologie d'évènement (par exemple des changements d'état).